Skip to main content

ScenarioController

The ScenarioController provides basic scenario management functionality for SWMM simulations, focusing on run properties and scenario metadata.

Overview

This controller handles scenario-related operations including retrieving run properties, latest completed runs, and scenario metadata. It serves as a simpler alternative to the more comprehensive ScenarioManagementController.

Data Sources

  • Azure Table Storage:
    • Runs table for run metadata and properties
  • Configuration: appsettings.json for connection string
  • No Blob Storage: Focuses on metadata only

Endpoints

GET /api/scenario/runproperties

Retrieves the latest completed run properties for a specific scenario.

Query Parameters:

  • scenario (string): Scenario name/identifier

Response:

  • 200 OK: Returns RunEntity object
  • 404 Not Found: No completed runs found
  • 500 Internal Server Error: Database error

Data Flow:

Query Filter:

PartitionKey eq '{partitionKey}' and Status eq 'RUN_IS_COMPLETE'

GET /api/scenario/latestrunproperties

Retrieves the latest completed run properties for the default scenario.

Response:

  • 200 OK: Returns RunEntity object
  • 404 Not Found: No completed runs found
  • 500 Internal Server Error: Database error

Data Flow:

Default Scenario: scenario0

GET /api/scenario/runs

Retrieves all run entities from the scenario table.

Response:

  • 200 OK: Returns list of RunEntity objects
  • 500 Internal Server Error: Database error

Data Flow:

Azure Storage Details

Table Storage Schema

Runs Table:

  • PartitionKey: {clientPartitionKey}_{scenario}
  • RowKey: {runDateTime} (formatted as yyyy-MM-ddTHH:mm:sszzz)
  • Properties:
    • EndTime: Simulation end time
    • Flooding: Total flooding volume
    • Flow: Total flow volume
    • InputFile: Input file name
    • ReportingTimeStep: Time step in minutes
    • StartTime: Simulation start time
    • Status: Run status
    • Timestamp: Entity timestamp
    • ETag: Entity tag for concurrency

Constants Used

  • CLIENT_INPUT_PARTITION_KEY: Base partition key
  • DEFAULT_SCENARIO_LIVE_RUN: Default scenario name (scenario0)
  • DATE_TIME_FORMAT: yyyy-MM-ddTHH:mm:sszzz
  • RUNS_TABLE: Runs

Data Models

RunEntity

public class RunEntity : ITableEntity
{
public string PartitionKey { get; set; }
public string RowKey { get; set; }
public string EndTime { get; set; }
public double? Flooding { get; set; }
public double? Flow { get; set; }
public string InputFile { get; set; }
public int? ReportingTimeStep { get; set; }
public string StartTime { get; set; }
public string Status { get; set; }
public DateTimeOffset Timestamp { get; set; }
public ETag ETag { get; set; }
}

Configuration

Required Settings:

{
"Values": {
"CloudStorageConnectionString": "DefaultEndpointsProtocol=https;AccountName=...;AccountKey=...;EndpointSuffix=core.windows.net"
}
}

Error Handling

  • Database Errors: Returns null for missing data
  • Query Errors: Graceful handling of table queries
  • Parsing Errors: Handles malformed entity data
  • Connection Issues: Returns null on storage errors

Performance Considerations

  • Async Operations: Uses async/await for database operations
  • Query Optimization: Filters by partition key and status
  • Memory Management: Efficient entity conversion
  • No Caching: Direct database queries

Dependencies

  • Azure.Data.Tables
  • GqcStorage1.TableEntities
  • Microsoft.AspNetCore.Mvc

Usage Examples

Get Latest Run for Specific Scenario:

GET /api/scenario/runproperties?scenario=scenario1

Get Latest Run for Default Scenario:

GET /api/scenario/latestrunproperties

Get All Runs:

GET /api/scenario/runs

Response Examples

RunEntity Response:

{
"partitionKey": "client_scenario1",
"rowKey": "2023-11-16T00:00:00-05:00",
"endTime": "2023-11-16T23:59:59-05:00",
"flooding": 1250.5,
"flow": 45678.9,
"inputFile": "scenario1.inp",
"reportingTimeStep": 15,
"startTime": "2023-11-16T00:00:00-05:00",
"status": "RUN_IS_COMPLETE",
"timestamp": "2023-11-16T23:59:59-05:00",
"etag": "W/\"datetime'2023-11-16T23:59:59.1234567Z'\""
}

Limitations

  • Basic Functionality: Limited compared to ScenarioManagementController
  • No CRUD Operations: Read-only operations only
  • No Validation: Minimal input validation
  • No Error Details: Returns null on errors
  • Synchronous: Some operations are synchronous

Comparison with ScenarioManagementController

FeatureScenarioControllerScenarioManagementController
CRUD OperationsRead-onlyFull CRUD
Data ModelsBasic entitiesDTOs with validation
Error HandlingBasicComprehensive
Async OperationsPartialFull async
Input ValidationNoneFull validation
StatisticsNoneRun statistics
SearchNoneScenario search

Future Enhancements

  1. Async Operations: Convert to full async/await
  2. Error Handling: More detailed error responses
  3. Validation: Add input validation
  4. Caching: Implement result caching
  5. Pagination: Support for large result sets